/* eslint-disable no-useless-escape */
/* eslint-disable no-unused-vars */
/* eslint-disable @typescript-eslint/no-unused-vars */
import { IChatToolCall } from '../../interface';

/**
 * @description 工具调用解析器
 * @export
 * @class ChatToolCallParser
 */
export class ChatToolCallParser {
  /**
   * @description 解析工具调用
   * @static
   * @param {string} toolCallString
   * @returns {*}  {IChatToolCall[]}
   * @memberof ChatToolCallParser
   */
  static parse(toolCallString: string): IChatToolCall[] {
    // 使用正则表达式匹配被<tool_call>和</tool_call>包围的内容
    // eslint-disable-next-line prefer-regex-literals
    const toolCallRegex = new RegExp(
      '<tool_call>\\s*({[\\s\\S]*?})\\s*</tool_call>',
      'g',
    );
    const matches = toolCallString.matchAll(toolCallRegex);
    const toolCalls: IChatToolCall[] = [];
    for (const match of matches) {
      try {
        const toolCallData = JSON.parse(match[1]);
        const tempToolCall = {
          name: toolCallData.name,
          parameters: toolCallData.parameters,
          error: toolCallData.error || false,
        };
        if (toolCallData.result) {
          Object.assign(tempToolCall, {
            result: toolCallData.result,
          });
        }
        toolCalls.push(tempToolCall);
      } catch (e) {
        console.error('解析工具调用失败:', e);
      }
    }
    return toolCalls;
  }
}
